﻿using System;
using System.Windows.Forms;

namespace monitor_server_2
{
    public enum DeviceTreeNodeType
    {
        Region,
        Station,
        Device
    }

    static class Curdir
    {
        private static string _dir = "not set";

        public static string CurDir
        {
            get { return _dir; }
            set { _dir = value; }
        }
        
    }

    class MyForm
    {
        bool _shown;
        Form _form;
        readonly FormWindowState _oldFormState;

        /// <summary>
        /// Показывает, отображается ли форма в данный момент.
        /// </summary>
        public bool IsShown
        {
            get {return _shown; }
        }

        /// <summary>
        /// Объуекту устанавливается указанная форму.
        /// </summary>
        public Form SetForm
        {
            set { _form = value; }
        }

        /// <summary>
        /// Показывает, выбрана ли форма.
        /// </summary>
        public bool IsNull
        {
            get { return _form == null; }
        }

        /// <summary>
        /// Конструктор без аргументов класса для удобной работы с формами.
        /// </summary>
        public MyForm() { }

        /// <summary>
        /// Конструктор класса для удобной работы с формами.
        /// </summary>
        /// <param name="form"></param>
        public MyForm(Form form)
        {
            _form = form;
            _form.Icon = _form.Owner.Icon;

            _form.FormClosing += _form_FormClosing;
            _form.Resize += _form_Resize;

            _oldFormState = FormWindowState.Normal;
            Show();
            _shown = true;
        }

        void _form_Resize(object sender, EventArgs e)
        {
            if (FormWindowState.Minimized == _form.WindowState)
            {
                _shown = false;
                _form.Hide();
            }
        }

        void _form_FormClosing(object sender, FormClosingEventArgs e)
        {
            _form = null;
        }
        
        /// <summary>
        /// Скрыть форму и изменить свойство IsShown на false.
        /// </summary>
        public void Hide()
        {
            _shown = false;
            _form.Hide();
        }

        /// <summary>
        /// Показать форму и изменить свойство IsShown на true.
        /// </summary>
        public void Show()
        {
            if (!_shown)
            {
                _form.Show();
                _form.WindowState = _oldFormState;
                _shown = true;
            }
            else
            {
                _form.TopMost = true;
            }

        }

        public DialogResult ShowDialog()
        {
            return _form.ShowDialog();
        }
        
    }

    public class DeviceTreeNodeOptions
    {

        public DeviceTreeNodeType Type { get; set; }
        //region
        public string MainStation { get; set; }
        //station
        public string Blr { get; set; }
        public string Coordinates1 { get; set; }
        public string Coordinates2 { get; set; }
        //device
        public string IpAddress { get; set; }
        public bool Active { get; set; }
    }
}